package com.itheima.reggie.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.reggie.common.UserHolder;
import com.itheima.reggie.domain.Cart;
import com.itheima.reggie.domain.User;
import com.itheima.reggie.mapper.CartMapper;
import com.itheima.reggie.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;


// 购物车
@Service
@Transactional
public class CartServiceImpl implements CartService {

    @Autowired
    private CartMapper cartMapper;

    //添加购物车
    @Override
    public Cart add(Cart cartParam) {
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        qw.eq(Cart::getUserId, UserHolder.get().getId());//根据传入id查找用户id
        //根据购物车传入的不为空的套餐id查找套餐
        qw.eq(cartParam.getSetmealId() != null, Cart::getSetmealId, cartParam.getSetmealId());
        //根据传入不为空的菜品id查找到菜品
        qw.eq(cartParam.getDishId() != null, Cart::getDishId, cartParam.getDishId());
        Cart cart = cartMapper.selectOne(qw);//查询单个
        //判断分类
        if (cart == null) {//数据库中没有情况下的
            cartParam.setUserId(UserHolder.get().getId());//将用户id补全到数据库用户id
            cartParam.setNumber(1);//将添加数量补全到数据库数量
            cartParam.setCreateTime(new Date());//补全数据库购物车的添加时间
            cartMapper.insert(cartParam);//调用方法保存到数据库
            cart = cartParam;//将结果赋值cart
        } else {//数据库中已有的情况下
            cart.setNumber(cart.getNumber() + 1);//补全添加一个
            cartMapper.updateById(cart);//修改数据库值
        }
        //返回结果
        return cart;
    }

    //查看购物车
    @Override
    public List<Cart> findList() {
        //select * from shopping_cart where user_id
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        qw.eq(Cart::getUserId, UserHolder.get().getId());//通过传入的id查找线程中的用户
        return cartMapper.selectList(qw);//调用mapper层方法查询所有信息并返回
    }

    //修改购物车
    @Override
    public Cart sub(Cart cartParam) {
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        qw.eq(Cart::getUserId, UserHolder.get().getId());//查询实体类是否有此用户
        qw.eq(cartParam.getSetmealId() != null, Cart::getSetmealId, cartParam.getSetmealId());
        qw.eq(cartParam.getDishId() != null, Cart::getDishId, cartParam.getDishId());
        Cart cart = cartMapper.selectOne(qw);
        if (cart.getNumber() > 1) {//number大于 1
            cart.setNumber(cart.getNumber() - 1);//number-1
            cartMapper.updateById(cart);//调用方法修改number值
        } else if (cart.getNumber() == 1) {
            cartMapper.delete(qw);//删除整条数据
            cart = cartParam;//赋值
        }
        return cart;
    }


    //清除购物车
    @Override
    public void clean() {
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        qw.eq(Cart::getUserId, UserHolder.get().getId());//根据传入的用户id查找线程中的用户
        cartMapper.delete(qw);//删除用户下的数据
    }

}
